//
// Created by LiuYou on 2021/10/24.
//

#include <iostream>
#include <unistd.h>
#include <csignal>


static void signalHandler(int sig) {
    write( 1, "!", 1 );
}


int main(int argc, char** argv) {
//    signal( SIGINT, SIG_IGN);
    signal( SIGINT, signalHandler );

    sigset_t sigSet;
    sigemptyset( &sigSet );
    sigaddset( &sigSet, SIGINT );
    // 此时 sigSet 信号集 中只有 SIGINT 一个信号。
    for (int i = 0; i < 1000; ++i) {
        // 不关心之前的信号集, 所以将它设置为 nullptr。
        /*
         * todo 笔记: 两个 sigprocmask();之间的代码执行的时候, 不会收到 SIGINT 信号。
         *  因为 SIGINT 信号被屏蔽了。
         */
        sigprocmask( SIG_BLOCK, &sigSet, nullptr );
        for (int j = 0; j < 5; ++j) {
            write( 1, "*", 1 );
            sleep( 1 );
        }
        write( STDOUT_FILENO, "\n", 1 );
        sigprocmask( SIG_UNBLOCK, &sigSet, nullptr );
    }


    return 0;
}
